package com.atguigu.principle.ocp;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: 这是一个用于绘图的类 - (也就是 - 使用方)
 *      优点是比较好理解，简单易操作。
 *      缺点是
 *          1) 违反了设计模式的ocp原则，即对扩展开放(提供方)，对修改关闭(使用方，当【使用方】在使用drawShape方法时代码发生了变化)。
            即当我们给类增加新功能的时候，尽量不修改代码，或者尽可能少修改代码.
            2) 比如我们这时要新增加一个图形种类 三角形TriangleShape.java，我们需要做如下修改，修改的地方较多(1.drawShape()方法；2.drawTriangle()方法)
 * @create: 2022-01-12 20:09
 **/
public class GraphicEditor {
    /**
     * 接收Shape对象，根据不同的type值，绘制不同的图形
     * @param shape 图形类（图形基类）
     */
    public void drawShape(Shape shape){
        int type = shape.type;
        if (type == 1){
            drawRectangle(shape);
        }else if (type == 2){
            drawCircle(shape);
        }else if (type == 3){
            drawTriangle(shape);
        }
    }

    /**
     * 绘制矩形
     * @param r 图形基类
     */
    public void drawRectangle(Shape r) {
        System.out.println(" 绘制矩形 ");
    }

    /**
     * 绘制圆形
     * @param r 图形基类
     */
    public void drawCircle(Shape r) {
        System.out.println(" 绘制圆形 ");
    }

    /**
     * 绘制三角形
     * @param r 图形基类
     */
    public void drawTriangle(Shape r) {
        System.out.println(" 绘制三角形 ");
    }
}
